#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <cstdlib>

int count = 0;

void handler(int signo)
{
    std::cout << "获取到信号: " << signo << std::endl;
    std::cout << "计数：" << count << std::endl;
    exit(0);
}

int main()
{
    //计算机算力测试
    alarm(1);
    signal(SIGALRM, handler);

    while(true) count++;

    //通过软件条件方式发送信号：闹钟alarm
    // int count = 0;
    // alarm(1);
    // while(true)
    // {
    //     ++count;
    //     std::cout << "计数：" << count << std::endl;
    // }

    //abort:C语言终止进程函数
    //signal(6, handler);
    //signal(SIGABRT, handler);

    // std::cout << "beign\n";
    // abort(); //终止进程
    // std::cout << "end\n"; //使用abort函数不会走到这行代码，尽管SIGABRT信号自定义作用

    // while(true)
    // {
    //     std::cout << "beign\n";
    //     abort(); //终止进程,循环终止
    //     std::cout << "end\n";
    // }

    //raise:给调用的进程自己发信号
    // signal(2, handler);
    // raise(2);

    // signal(2, handler);
    // while(true)
    // {
    //     sleep(1);
    //     raise(2);
    // }

    //自定义捕捉信号
    //ctrl+c：发送2号信号
    //ctrl+\: 发送3号信号
    // signal(2, handler);
    // signal(3, handler);

    // signal(SIGINT, handler);
    // signal(SIGQUIT, handler);

    // while(true)
    // {
    //     sleep(1);
    //     std::cout << "我是一个进程，正在运行...，我的pid为：" << getpid() << std::endl;
    // }

    //自定义31个信号
    //9号信号是管理员信号，不能被自定义，就算是自定义了也无效
    // for(int i = 1; i <= 31; i++)
    // {
    //     signal(i, handler);
    // }

    // while(true)
    // {
    //     sleep(1);
    //     std::cout << "我是一个进程，正在运行...，我的pid为：" << getpid() << std::endl;
    // }

    return 0;
}